package com.own.business.pay.core.base;

import com.own.business.pay.common.em.PayEnum;
import com.own.business.pay.core.model.PayOrderModel;
import com.own.business.pay.core.model.PayResultModel;
import com.own.business.pay.core.model.RefundOrderModel;
import com.own.business.pay.entity.po.BillHistory;

/**
 * BasePayService
 *
 * @author chenxueli
 * @date 2023-07-13 14:05:00
 */
public interface BasePayService {

    /**
     * 支出方法
     *
     * @param type  支付方式
     * @param model 支付订单
     * @return 支付凭证
     */
    PayResultModel pay(PayEnum.Type type, PayOrderModel model);

    /**
     * 收入方法（提现）
     *
     * @param model 收入订单
     */
    void income(PayOrderModel model);

    /**
     * 查询订单
     *
     * @param outTradeNo 商户订单号
     * @return 账单信息
     */
    BillHistory query(String outTradeNo);

    /**
     * 关闭订单
     *
     * @param outTradeNo 商户订单号
     */
    void close(String outTradeNo);

    /**
     * 订单退款
     *
     * @param outTradeNo 商户订单
     * @param model      退款信息
     */
    void refund(String outTradeNo, RefundOrderModel model);

    /**
     * 查询单笔退款信息
     *
     * @param outTradeNo  商户订单
     * @param outRefundNo 商户退款单号
     * @return 账单信息
     */
    BillHistory queryRefund(String outTradeNo, String outRefundNo);

}
